library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages ----------------------------------------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.5     v purrr   0.3.4
v tibble  3.1.0     v dplyr   1.0.5
v tidyr   1.1.3     v stringr 1.4.0
v readr   1.3.1     v forcats 0.5.1
-- Conflicts -------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
covid19 <- read_csv("data/covid19-daily-cases.csv")
Parsed with column specification:
cols(
  country_region = col_character(),
  date = col_date(format = ""),
  confirmed = col_double()
)
covid19
covid19 %>% 
  ggplot(aes(
    x = date, 
    y = confirmed, 
    colour = country_region)) +
  geom_line() +
  guides(colour = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.

Fit with log scale so it becomes normal

covid19 %>% 
  ggplot(aes(
    x = date, 
    y = log10(confirmed),
    colour = country_region)) +
  geom_line() +
  guides(colour = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.

covid19 %>% 
  ggplot(aes(
    x = date, 
    y = confirmed, 
    colour = country_region)) +
  geom_line() +
  guides(colour = FALSE) +
  scale_y_log10()
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: Transformation introduced infinite values in continuous y-axis

covid19_rel <- covid19 %>% 
  group_by(country_region) %>% 
  mutate(days = as.numeric(date - min(date))) %>% 
  ungroup()
covid19_rel
world <- covid19_rel %>% 
  ggplot(aes(
    x = days,
    y = confirmed, 
    colour = country_region)) +
  geom_line() +
  scale_y_log10() +
  guides(colour = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
world
Warning: Transformation introduced infinite values in continuous y-axis

covid19_nz <- covid19_rel %>% 
  filter(country_region == "New Zealand")
p_nz <- covid19_rel %>% 
  ggplot(aes(x = days, y = confirmed, 
    group = country_region)) +
  geom_line(colour = "grey", alpha = 0.5) +
  geom_line(colour = "#238b45", size = 1, data = covid19_nz) +
  scale_y_log10() +
  guides(colour = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
p_nz
Warning: Transformation introduced infinite values in continuous y-axis

p_nz <- p_nz +
  geom_label(aes(
    x = max(days), y = max(confirmed),
    label = country_region), data = covid19_nz,
    colour = "#238b45", nudge_x = 3, nudge_y = .5)
p_nz
Warning: Transformation introduced infinite values in continuous y-axis

p_nz <- p_nz +
  scale_y_log10(labels = scales::label_comma()) +
  xlim(c(0, 100))
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.
p_nz
Warning: Transformation introduced infinite values in continuous y-axis

p_nz <- p_nz +
  labs(
    x = "Days since March 1",
    y = "Confirmed cases (on log10)",
    title = "Worldwide coronavirus confirmed cases",
    subtitle = "highlighting New Zealand",
    caption = "Data source: John Hopkins University, CSSE"
  )
p_nz
Warning: Transformation introduced infinite values in continuous y-axis

library(plotly)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
ggplotly(p_nz)
Warning: Transformation introduced infinite values in continuous y-axis
Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]) :
  geom_GeomLabel() has yet to be implemented in plotly.
  If you'd like to see this geom implemented,
  Please open an issue with your example code at
  https://github.com/ropensci/plotly/issues
LS0tDQp0aXRsZTogIkNvdmlkIDE5IEV4cGxvcmF0aW9uIFByb2plY3QiDQpvdXRwdXQ6DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCg0KDQpgYGB7ciByZWFkfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpjb3ZpZDE5IDwtIHJlYWRfY3N2KCJkYXRhL2NvdmlkMTktZGFpbHktY2FzZXMuY3N2IikNCmNvdmlkMTkNCmBgYA0KDQpgYGB7ciBncmFwaH0NCmNvdmlkMTkgJT4lIA0KICBnZ3Bsb3QoYWVzKA0KICAgIHggPSBkYXRlLCANCiAgICB5ID0gY29uZmlybWVkLCANCiAgICBjb2xvdXIgPSBjb3VudHJ5X3JlZ2lvbikpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBndWlkZXMoY29sb3VyID0gRkFMU0UpDQpgYGANCg0KRml0IHdpdGggbG9nIHNjYWxlIHNvIGl0IGJlY29tZXMgbm9ybWFsDQoNCmBgYHtyIGdyYXBoIGxvZ30NCmNvdmlkMTkgJT4lIA0KICBnZ3Bsb3QoYWVzKA0KICAgIHggPSBkYXRlLCANCiAgICB5ID0gbG9nMTAoY29uZmlybWVkKSwNCiAgICBjb2xvdXIgPSBjb3VudHJ5X3JlZ2lvbikpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBndWlkZXMoY29sb3VyID0gRkFMU0UpDQpgYGANCg0KYGBge3IgZ3JhcGggbG9nIHNjYWxlfQ0KY292aWQxOSAlPiUgDQogIGdncGxvdChhZXMoDQogICAgeCA9IGRhdGUsIA0KICAgIHkgPSBjb25maXJtZWQsIA0KICAgIGNvbG91ciA9IGNvdW50cnlfcmVnaW9uKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGd1aWRlcyhjb2xvdXIgPSBGQUxTRSkgKw0KICBzY2FsZV95X2xvZzEwKCkNCmBgYA0KDQpgYGB7ciByZWdpb259DQpjb3ZpZDE5X3JlbCA8LSBjb3ZpZDE5ICU+JSANCiAgZ3JvdXBfYnkoY291bnRyeV9yZWdpb24pICU+JSANCiAgbXV0YXRlKGRheXMgPSBhcy5udW1lcmljKGRhdGUgLSBtaW4oZGF0ZSkpKSAlPiUgDQogIHVuZ3JvdXAoKQ0KY292aWQxOV9yZWwNCmBgYA0KDQpgYGB7ciByZWdpb24gZ3JhcGh9DQp3b3JsZCA8LSBjb3ZpZDE5X3JlbCAlPiUgDQogIGdncGxvdChhZXMoDQogICAgeCA9IGRheXMsDQogICAgeSA9IGNvbmZpcm1lZCwgDQogICAgY29sb3VyID0gY291bnRyeV9yZWdpb24pKSArDQogIGdlb21fbGluZSgpICsNCiAgc2NhbGVfeV9sb2cxMCgpICsNCiAgZ3VpZGVzKGNvbG91ciA9IEZBTFNFKQ0Kd29ybGQNCmBgYA0KYGBge3Igbnp9DQpjb3ZpZDE5X256IDwtIGNvdmlkMTlfcmVsICU+JSANCiAgZmlsdGVyKGNvdW50cnlfcmVnaW9uID09ICJOZXcgWmVhbGFuZCIpDQpwX256IDwtIGNvdmlkMTlfcmVsICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGF5cywgeSA9IGNvbmZpcm1lZCwgDQogICAgZ3JvdXAgPSBjb3VudHJ5X3JlZ2lvbikpICsNCiAgZ2VvbV9saW5lKGNvbG91ciA9ICJncmV5IiwgYWxwaGEgPSAwLjUpICsNCiAgZ2VvbV9saW5lKGNvbG91ciA9ICIjMjM4YjQ1Iiwgc2l6ZSA9IDEsIGRhdGEgPSBjb3ZpZDE5X256KSArDQogIHNjYWxlX3lfbG9nMTAoKSArDQogIGd1aWRlcyhjb2xvdXIgPSBGQUxTRSkNCnBfbnoNCmBgYA0KDQpgYGB7ciBncmFwaCBuen0NCnBfbnogPC0gcF9ueiArDQogIGdlb21fbGFiZWwoYWVzKA0KICAgIHggPSBtYXgoZGF5cyksIHkgPSBtYXgoY29uZmlybWVkKSwNCiAgICBsYWJlbCA9IGNvdW50cnlfcmVnaW9uKSwgZGF0YSA9IGNvdmlkMTlfbnosDQogICAgY29sb3VyID0gIiMyMzhiNDUiLCBudWRnZV94ID0gMywgbnVkZ2VfeSA9IC41KQ0KcF9ueg0KYGBgDQpgYGB7ciBncmFwaCBueiBzY2FsZX0NCnBfbnogPC0gcF9ueiArDQogIHNjYWxlX3lfbG9nMTAobGFiZWxzID0gc2NhbGVzOjpsYWJlbF9jb21tYSgpKSArDQogIHhsaW0oYygwLCAxMDApKQ0KcF9ueg0KYGBgDQoNCmBgYHtyIGdyYXBoIG56IHNjYWxlIGxhYmVsc30NCnBfbnogPC0gcF9ueiArDQogIGxhYnMoDQogICAgeCA9ICJEYXlzIHNpbmNlIE1hcmNoIDEiLA0KICAgIHkgPSAiQ29uZmlybWVkIGNhc2VzIChvbiBsb2cxMCkiLA0KICAgIHRpdGxlID0gIldvcmxkd2lkZSBjb3JvbmF2aXJ1cyBjb25maXJtZWQgY2FzZXMiLA0KICAgIHN1YnRpdGxlID0gImhpZ2hsaWdodGluZyBOZXcgWmVhbGFuZCIsDQogICAgY2FwdGlvbiA9ICJEYXRhIHNvdXJjZTogSm9obiBIb3BraW5zIFVuaXZlcnNpdHksIENTU0UiDQogICkNCnBfbnoNCmBgYA0KDQpgYGB7ciBpbnRlcmFjdGl2ZX0NCmxpYnJhcnkocGxvdGx5KQ0KZ2dwbG90bHkocF9ueikNCmBgYA==